#include_function".\src\lib_th10.txt"

img=[
	csd~"img\marisa.png",
	csd~"img\marisa_shot.png",
	csd~"img\marisa_option.png",
];
let IMG_PLAYER=img[0];
let IMG_SHOT=img[1];
let IMG_OPTION=img[2];


sub onInitialize_Marisa{
	SetSpeed(5,2);
	onInitialize;
	ascent(n in 0..length(img)){LoadGraphic(img[n]);}
}


sub onSpellCard{
	UseSpellCard("Reigeki_Marisa",IsLastSpell);
}


task MainShotFire{
	let c=0;
	
	loop{
		if(
			((GetKeyState(VK_SHOT)==KEY_PUSH)||(GetKeyState(VK_SHOT)==KEY_HOLD))&&
			(!OnMissed)&&
			(!OnEvent)
		){
			c=6;
		}
		if(
			(c>0)&&
			(!OnMissed)&&
			(!OnEvent)
		){
			PlayShotSE;
			MainShot(-10,DMG_MAINSHOT);
			MainShot(10,DMG_MAINSHOT);
			c--;
			loop(2){yield;}
		}
		yield;
	}
}


task MainShot(x,dmg){
	let obj=Obj_Create(OBJ_SHOT);
	Obj_SetPosition(obj,GetPlayerX+x,GetPlayerY-8);
	Obj_SetSpeed(obj,24);
	Obj_SetAngle(obj,270);
	ObjShot_SetGraphic(obj,1);
	ObjShot_SetDamage(obj,dmg);
	ObjShot_SetPenetration(obj,1);
	
	let obje=Obj_Create(OBJ_EFFECT);
	let y=0;
	let alpha=128;
	let dalpha=6.4;
	ObjEffect_SetTexture(obje,IMG_SHOT);
	ObjEffect_SetPrimitiveType(obje,PRIMITIVE_TRIANGLESTRIP);
	ObjEffect_SetLayer(obje,2);
	ObjEffect_CreateVertex(obje,4);
	ObjEffect_SetVertexUV(obje,0,0,0);
	ObjEffect_SetVertexUV(obje,1,0,32);
	ObjEffect_SetVertexUV(obje,2,16,0);
	ObjEffect_SetVertexUV(obje,3,16,32);
	ObjEffect_SetVertexXY(obje,0,-8,-16);
	ObjEffect_SetVertexXY(obje,1,-8,16);
	ObjEffect_SetVertexXY(obje,2,8,-16);
	ObjEffect_SetVertexXY(obje,3,8,16);
	while(!Obj_BeDeleted(obj)){
		x=Obj_GetX(obj);
		y=Obj_GetY(obj);
		Obj_SetPosition(obje,x,y);
		yield;
	}
	
	ObjEffect_SetRenderState(obje,ADD);
	ObjEffect_SetVertexUV(obje,0,0,32);
	ObjEffect_SetVertexUV(obje,1,0,64);
	ObjEffect_SetVertexUV(obje,2,16,32);
	ObjEffect_SetVertexUV(obje,3,16,64);
	loop(20){
		Obj_SetPosition(obje,x,y);
		y-=4;
		ascent(n in 0..4){ObjEffect_SetVertexColor(obje,n,alpha,255,255,255);}
		alpha-=dalpha;
		yield;
	}
	Obj_Delete(obje);
}


task BombEffect{
	loop{
		while(!OnBomb){yield;}
		MainRing;
		while(OnBomb){yield;}
	}
	
	task MainRing{
		let obj=Obj_Create(OBJ_EFFECT);
		let r=40;
		let dr=4;
		let alpha=255;
		let dalpha=12.75;
		let ang=rand(0,360);
		let dang=-15;
		ObjEffect_SetTexture(obj,IMG_BOMB);
		ObjEffect_SetPrimitiveType(obj,PRIMITIVE_TRIANGLESTRIP);
		ObjEffect_SetRenderState(obj,ADD);
		ObjEffect_CreateVertex(obj,66);
		ascent(n in 0..33){
			ObjEffect_SetVertexUV(obj,n*2,64*n,0);
			ObjEffect_SetVertexUV(obj,n*2+1,64*n,64);
		}
		
		Move;
		Rotate;
		Ring;
		CreateLeaf;
		
		loop(20){
			r+=dr;
			ascent(n in 0..33){
				ObjEffect_SetVertexXY(obj,n*2,(r-15)*cos((360/32)*n),(r-15)*sin((360/32)*n));
				ObjEffect_SetVertexXY(obj,n*2+1,(r+15)*cos((360/32)*n),(r+15)*sin((360/32)*n));
			}
			yield;
		}
		
		loop(140){yield;}
		
		loop(20){
			alpha-=dalpha;
			ascent(n in 0..66){ObjEffect_SetVertexColor(obj,n,alpha,255,255,255);}
			yield;
		}
		Obj_Delete(obj);
		
		task Move{
			let x=GetPlayerX;
			let y=GetPlayerY;
			let v=-1.2;
			let a=0.06;
			ascent(n in 0..180){
				Obj_SetPosition(obj,x,y);
				y+=v;
				if(n>=160){v+=a;}
				yield;
			}
		}
		
		task Rotate{
			while(!Obj_BeDeleted(obj)){
				ang+=dang;
				ObjEffect_SetAngle(obj,0,0,ang);
				yield;
			}
		}
		
		task Ring{
			loop(4){
				SubRing(obj);
				loop(10){yield;}
			}
		}
		
		task CreateLeaf{
			loop(30){yield;}
			loop(120){
				Leaf(Obj_GetX(obj),Obj_GetY(obj),1);
				Leaf(Obj_GetX(obj),Obj_GetY(obj),-1);
				yield;
			}
		}
	}
	
	task SubRing(objp){
		let obj=Obj_Create(OBJ_EFFECT);
		let r=40;
		let dr=4;
		let alpha=255;
		let dalpha=12.75;
		let ang=rand(0,360);
		let dang=-7.5;
		ObjEffect_SetTexture(obj,IMG_BOMB);
		ObjEffect_SetPrimitiveType(obj,PRIMITIVE_TRIANGLESTRIP);
		ObjEffect_SetRenderState(obj,ADD);
		ObjEffect_CreateVertex(obj,66);
		ascent(n in 0..33){
			ObjEffect_SetVertexUV(obj,n*2,32*n,0);
			ObjEffect_SetVertexUV(obj,n*2+1,32*n,64);
		}
		ascent(n in 0..66){ObjEffect_SetVertexColor(obj,n,alpha,255,0,255);}
		
		Move;
		Rotate;
		
		loop(20){
			r+=dr;
			ascent(n in 0..33){
				ObjEffect_SetVertexXY(obj,n*2,(r-10)*cos((360/32)*n),(r-10)*sin((360/32)*n));
				ObjEffect_SetVertexXY(obj,n*2+1,(r+10)*cos((360/32)*n),(r+10)*sin((360/32)*n));
			}
			yield;
		}
		dr=2;
		loop(20){
			r+=dr;
			dr-=0.1;
			ascent(n in 0..33){
				ObjEffect_SetVertexXY(obj,n*2,(r-10)*cos((360/32)*n),(r-10)*sin((360/32)*n));
				ObjEffect_SetVertexXY(obj,n*2+1,(r+10)*cos((360/32)*n),(r+10)*sin((360/32)*n));
			}
			yield;
		}
		loop(20){
			alpha-=dalpha;
			ascent(n in 0..66){ObjEffect_SetVertexColor(obj,n,alpha,255,0,255);}
			r+=dr;
			ascent(n in 0..33){
				ObjEffect_SetVertexXY(obj,n*2,(r-10)*cos((360/32)*n),(r-10)*sin((360/32)*n));
				ObjEffect_SetVertexXY(obj,n*2+1,(r+10)*cos((360/32)*n),(r+10)*sin((360/32)*n));
			}
			yield;
		}
		Obj_Delete(obj);
		
		task Move{
			while(!Obj_BeDeleted(obj)){
				Obj_SetPosition(obj,Obj_GetX(objp),Obj_GetY(objp));
				yield;
			}
		}
		
		task Rotate{
			while(!Obj_BeDeleted(obj)){
				ang+=dang;
				ObjEffect_SetAngle(obj,0,0,ang);
				yield;
			}
		}
	}
	
	task Leaf(x,y,d){
		let obj=Obj_Create(OBJ_EFFECT);
		let scale=1;
		let dscale=1/24;
		let r=120;
		let v=2*d;
		let ang=rand(0,360);
		let gang=rand(0,360);
		ObjEffect_SetTexture(obj,IMG_EFFECTS);
		ObjEffect_SetPrimitiveType(obj,PRIMITIVE_TRIANGLESTRIP);
		ObjEffect_SetRenderState(obj,ADD);
		ObjEffect_CreateVertex(obj,4);
		ObjEffect_SetVertexUV(obj,0,128,128);
		ObjEffect_SetVertexUV(obj,1,128,160);
		ObjEffect_SetVertexUV(obj,2,160,128);
		ObjEffect_SetVertexUV(obj,3,160,160);
		ObjEffect_SetVertexXY(obj,0,-16,-16);
		ObjEffect_SetVertexXY(obj,1,-16,16);
		ObjEffect_SetVertexXY(obj,2,16,-16);
		ObjEffect_SetVertexXY(obj,3,16,16);
		ascent(n in 0..4){ObjEffect_SetVertexColor(obj,n,255,127+127*d,0,127-127*d);}
		Obj_SetPosition(obj,x+r*cos(ang),y+r*sin(ang));
		while(scale>0){
			scale-=dscale;
			ObjEffect_SetScale(obj,scale,scale);
			gang+=3;
			ObjEffect_SetAngle(obj,0,0,gang);
			Obj_SetPosition(obj,Obj_GetX(obj)+v*cos(ang),Obj_GetY(obj)+v*sin(ang));
			yield;
		}
		Obj_Delete(obj);
	}
}